//"use strict";
const path = require("path");
//const TerserPlugin = require("terser-webpack-plugin");
//const CompressionPlugin = require("compression-webpack-plugin");
// const packageJson = require("./package.json");
const fs = require("fs");

// Generate pages object
const pages = {};

function getEntryFile(entryPath) {
  const files = fs.readdirSync(entryPath);
  return files;
}
function resolve(dir) {
  return path.join(__dirname, dir);
}
const chromeName = getEntryFile(path.resolve("src/entry"));

function getFileExtension(filename) {
  return /[.]/.exec(filename) ? /[^.]+$/.exec(filename)[0] : undefined;
}
chromeName.forEach(name => {
  const fileExtension = getFileExtension(name);
  const fileName = name.replace("." + fileExtension, "");
  pages[fileName] = {
    entry: `src/entry/${name}`,
    template: "public/index.html",
    filename: `${fileName}.html`
  };
});
//ssfsa
const name = "SHARE CREATORS"; // page title

const isDevMode = process.env.NODE_ENV === "development";
// If your port is set to 80,
// use administrator privileges to execute the command line.
// For example, Mac: sudo npm run
// You can change the port by the following method:
// port = 9527 npm run dev OR npm run dev --port = 9527
// const port = process.env.port || process.env.npm_config_port || 9527 // dev port

// All configuration item explanations can be find in https://cli.vuejs.org/config/
module.exports = {
  pages,
  filenameHashing: false,
  lintOnSave: false,
  /**
   * You will need to set publicPath if you plan to deploy your site under a sub path,
   * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/,
   * then publicPath should be set to "/bar/".
   * In most cases please use '/' !!!
   * Detail: https://cli.vuejs.org/config/#publicpath
   */
  // parallel: false,
  // publicPath: "/",
  // outputDir: "chromePlugin",
  // assetsDir: "static",
  productionSourceMap: false,
  outputDir:'chromePlugin',
  devServer: {
    port: 8100,
    https: false,
    // disableHostCheck: true,
    proxy: {
      //蔡政杰-以图搜图
      //   '/api/asset/searchByResource': {
      //     target: 'http://192.168.51.33:8001',
      //     logLevel:"debug",
      //     changeOrigin: true
      //   },
      //蔡政杰-搜索
      //   '/api/asset/search': {
      //     target: 'http://192.168.51.33:8001',
      //     logLevel:"debug",
      //     changeOrigin: true
      //   },
      //   '/api': {
      //     target: 'http://192.168.50.28/',
      //     logLevel:"debug",
      //     changeOrigin: true
      //   },
      "/onlyoffice": {
        target: "http://192.168.50.28",
        logLevel: "debug",
        changeOrigin: true
      },
      "/api": {
        target: "http://192.168.50.28",
        logLevel: "debug",
        changeOrigin: true
      }
    }
  },
  // css: {
  //     loaderOptions: {
  //       sass: {
  //         implementation: require('sass')
  //       }
  //     }
  // },
  chainWebpack: config => {
    // config.plugins.delete("preload"); // TODO: need test
    // config.plugins.delete("prefetch"); // TODO: need test

    config.plugin("copy").use(require("copy-webpack-plugin"), [
      {
        patterns: [
          {
            from: path.resolve(`src/manifest.${process.env.NODE_ENV}.json`),
            to: `${path.resolve("chromePlugin")}/manifest.json`
          },
          {
            from: path.resolve("public/"),
            to: `${path.resolve("chromePlugin")}/`
          }
        ]
      }
    ]);
    config.module.rule("svg").exclude.add(resolve("src/icons")).end();
    config.module
      .rule("icons")
      .test(/\.svg$/)
      .include.add(resolve("src/icons"))
      .end()
      .use("svg-sprite-loader")
      .loader("svg-sprite-loader")
      .options({
        symbolId: "icon-[name]"
      })
      .end();

    // set preserveWhitespace
    // config.module
    //   .rule("vue")
    //   .use("vue-loader")
    //   .loader("vue-loader")
    //   .tap(options => {
    //     options.compilerOptions.preserveWhitespace = true;
    //     return options;
    //   })
    //   .end();

    config
      // https://webpack.js.org/configuration/devtool/#development
      .when(process.env.NODE_ENV === "development", config =>
        config.devtool("cheap-source-map")
      );

    config.when(process.env.NODE_ENV !== "development", config => {
      // config
      //   .plugin("ScriptExtHtmlWebpackPlugin")
      //   .after("html")
      //   .use("script-ext-html-webpack-plugin", [
      //     {
      //       // `runtime` must same as runtimeChunk name. default is `runtime`
      //       inline: /runtime\..*\.js$/
      //     }
      //   ])
      //   .end();
      // 下面这个加了后，content就无法加载
      // config.optimization.splitChunks({
      //   chunks: "all",
      //   cacheGroups: {
      //     libs: {
      //       name: "chunk-libs",
      //       test: /[\\/]node_modules[\\/]/,
      //       priority: 10,
      //       chunks: "initial" // only package third parties that are initially dependent
      //     },
      //     elementUI: {
      //       name: "chunk-elementUI", // split elementUI into a single package
      //       priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
      //       test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
      //     },
      //     commons: {
      //       name: "chunk-commons",
      //       test: resolve("src/components"), // can customize your rules
      //       minChunks: 3, //  minimum common number
      //       priority: 5,
      //       reuseExistingChunk: true
      //     }
      //   }
      // });
      // config.optimization.runtimeChunk("single");
    });
  },
  configureWebpack: config => {
    // scss符号图标乱码问题
    const sassLoader = require.resolve("sass-loader");
    config.module.rules
      .filter(rule => {
        return rule.test.toString().indexOf("scss") !== -1;
      })
      .forEach(rule => {
        rule.oneOf.forEach(oneOfRule => {
          const sassLoaderIndex = oneOfRule.use.findIndex(
            item => item.loader === sassLoader
          );
          oneOfRule.use.splice(sassLoaderIndex, 0, {
            loader: require.resolve("css-unicode-loader")
          });
        });
      });
    // provide the app's title in webpack's name field, so that
    // it can be accessed in index.html to inject the correct title.
    let result = {
      name: name,
      // parallel: false,
      resolve: {
        alias: {
          "@": resolve("src")
        }
      },
      module: {
          exprContextCritical: false,
        rules: [
          // {
          //   test: /\.woff/,
          //   loader: "url-loader",
          //   options: {
          //     limit: false
          //   }
          // },
          // {
          //   test: /\.ttf/,
          //   loader: "url-loader"
          // }
          //     {
          //       test: /\.js$/,
          //       loader: require.resolve("@open-wc/webpack-import-meta-loader")
          //     }
        ]
      },
      output: {
        filename: "[name].js",
        chunkFilename: "[name].js"
      },
      devtool: isDevMode ? "inline-source-map" : false
    };

    // if (process.env.NODE_ENV === "production") {
    //   result.plugins = [
    //     new TerserPlugin({
    //       parallel: 4,
    //       terserOptions: {
    //         output: {
    //           comments: false,
    //           beautify: false
    //         },
    //         compress: {
    //           drop_console: false
    //         }
    //       },
    //       extractComments: false
    //     }),
    //     new CompressionPlugin({
    //       algorithm: "gzip",
    //       test: /\.js$|\.html$|\.css/,
    //       threshold: 10240,
    //       deleteOriginalAssets: false
    //     })
    //   ];
    // }

    return result;
  },
  css: {
    extract: false // Make sure the css is the same
  }
};
